home *** CD-ROM | disk | FTP | other *** search
- /* $Id: pl-buffe.h,v 1.1 1995/04/18 12:29:04 jan Exp $
-
- Part of XPCE
- Designed and implemented by Anjo Anjewierden and Jan Wielemaker
- E-mail: jan@swi.psy.uva.nl
-
- Copyright (C) 1993 University of Amsterdam. All rights reserved.
- */
-
- typedef struct
- { char * base; /* allocated base */
- char * top; /* pointer to top */
- char * max; /* current location */
- } buffer, *Buffer;
-
- Buffer newBuffer(void);
- void freeBuffer(Buffer);
- void growBuffer(Buffer, long);
-
- #define addBuffer(b, obj, type) \
- do \
- { if ( (b)->top + sizeof(type) > (b)->max ) \
- growBuffer(b, sizeof(type)); \
- *((type *)(b)->top) = obj; \
- (b)->top += sizeof(type); \
- } while(0)
-
- #define baseBuffer(b, type) ((type *) (b)->base)
- #define topBuffer(b, type) ((type *) (b)->top)
- #define inBuffer(b, addr) ((char *) (addr) >= (b)->base && \
- (char *) (addr) < (b)->top)
-
- #define seekBuffer(b, cnt, type) ((b)->top = sizeof(type) * (cnt) + (b)->base)
- #define sizeOfBuffer(b) ((b)->top - (b)->base)
- #define entriesBuffer(b, type) (sizeOfBuffer(b) / sizeof(type))
- #define initBuffer(b) ((b)->base = (b)->max = (b)->top = NULL)
-
- #define discardBuffer(b) \
- do \
- { if ( (b)->base ) \
- free((b)->base); \
- initBuffer(b); \
- } while(0)
-
-
-